
import axios from 'axios'
import errorHandle from './errorHandle'


export default {
  baseURL: '',

  /**
   *  获取当前链接URL
   * @return {String} 
   */
  getUrl () {
    const url = location.href;
    const _index = url.indexOf("#")
    if (_index !== -1) {
      return url.substring(0, _index);
    }
    return url;
  },


  /**
   *  axios默认配置
   *
   * @returns {Object} axios默认配置
   * @memberof HttpRequest
   */
  getDefaultConfig () {
    return {
      baseURL: this.baseURL, // API根路径
      headers: {
        'Content-Type': 'application/json; charset=utf-8',
        'sine_url': this.getUrl(),
        'WX_REQUEST_CHANNEL': 'AXIOS_HTTP_REQUEST',
        // 'WX_APP_ID': 'SQlNpI1CpBNbj3MIZ0vHdg',
      },
      timeout: 10 * 1000 // 请求超时时间:10s后请求失败
    }
  },


  /**
   *
   * 创建Axios实例
   * @param {Object} options 用户传进来的配置
   * @returns {Axios} 返回axios实例
   * @memberof HttpRequest
   */
  createAxiosInstance (options) {
    const axiosInstance = axios.create()
    // 将默认配置和用户设置的配置进行合并
    const newOptions = this.mergeOptions(this.getDefaultConfig(), options)
    // 调用拦截器
    this.interceptors(axiosInstance)
    // 返回实例
    return axiosInstance(newOptions)
  },


  /**
   * 合并配置
   *
   * @param {Object} defaultOptions 已有配置
   * @param {Object} source 传入的配置
   * @returns {Object} 返回新配置
   * @memberof HttpRequest
   */
  mergeOptions (defaultOptions, source) {
    if (typeof source !== 'object' || source == null) {
      return defaultOptions
    }
    if (source && source.headers) {
      source.headers = Object.assign(defaultOptions.headers, source.headers)
    }
    return Object.assign(defaultOptions, source)
  },



  /**
   * 拦截器
   *
   * @param {Axios} instance
   * @memberof HttpRequest
   */
  interceptors (instance) {
    // 添加请求拦截器
    instance.interceptors.request.use((config) => {
      return config
    }, (error) => {
      // errorHandle(error)
      return Promise.reject(error)
    })

    // 响应拦截器
    instance.interceptors.response.use((res) => {
      if (res.status === 200) {
        if (res.data.code === -1) {
          window.location.href = res.data.data
        }
        return Promise.resolve(res.data)
      }
      return Promise.reject(res)
    }, (error) => {
      // errorHandle(error)
      return Promise.reject(error)
    })
  },


  /**
   * get方法封装
   *
   * @param {String} url 请求地址
   * @param {Object} query 请求参数
   * @param {Object} config 请求配置
   * @returns {Promise} 返回一个Promise
   * @memberof HttpRequest
   */
  get (url, query, agentId) {
    return this.createAxiosInstance({
      url,
      method: 'get',
      params: query,
      headers: {
        'WX_APP_ID': agentId
      }
    })
  },

  /**
   * post方法封装
   *
   * @param {String} url 请求地址
   * @param {Object} data 请求体数据
   * @param {Object} config 请求配置
   * @returns {Promise} 返回一个Promise
   * @memberof HttpRequest
   */
  post (url, data, agentId) {
    return this.createAxiosInstance({
      url,
      method: 'post',
      data,
      headers: {
        'WX_APP_ID': agentId
      }
    })
  }





}

